//
// Created by root on 2022/3/17.
//

// 逆波兰表示法的计算器
// 这个是对 4.3章外部变量的练习

// 逆波兰表示法：
// 正常算术表达式 (1-2)*(4+5) 代表 先算1-2，再算4+5，最后两结果相乘,
// 逆波兰表示法这样写 1 2 - 4 5 + *

// 程序设计思路
// 每次读一个 数字或者运算符 ,
// 如果读到的是数字， 放入栈（先进后出）中，
// 如果读到的是 +-*/ , 就弹出最上面两个数字，计算，将结果放回去，
// 其他情况忽略
// TODO 只考虑了整数，没有考虑浮点数
#include <stdio.h>

#include "stack.h"
#include "gettop.h"
#include "../escape/escape.h"
#include "../atof/atof.h"
//#include "operator.h"

// extern 是在声明一个方法，但这个方法不在这个文件中定义
extern isOperator(char a);
int main(){

    char line[1000];
    char lineToPrint[1000];
    int length;
    while ((length = gettop(line)) >= 0) {
        if (length == 0) {
            int value = pop();
            printf("current result is %d \n", value);
            push(value);
            continue;
        }
        if (isOperator(line[0])) {
            // 计算
            int a = pop();
            int b = pop();
            switch (line[0]) {
                case '+': push(a + b);break;
                case '-': push(b - a);break;
                case '*': push(b * a);break;
                case '/': push(b / a);break;
                default:
                    printf("error operation %s", line);
            }
        } else {
            // push
           push(atoi(line));
        }
    }
    printf("运行结束\n");
}